﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ResultOutput(DigitSum(new int[] 
            { 
                ReadEnteredDigit(), 
                ReadEnteredDigit(), 
                ReadEnteredDigit() 
            }));
        }

        static int ReadEnteredDigit()
        {
            while(true)
            {
                Console.WriteLine("Please enter a digit below");
                var enteredDigitString = Console.ReadLine();

                var enteredDigit = 0;
                bool tryParseResult = int.TryParse(enteredDigitString,out enteredDigit);

                if(tryParseResult)
                {
                    return enteredDigit;

                }
                else
                {
                    Console.Beep();
                    
                }

            }
        }

        static int DigitSum(int[] digitsToBeSummed)
        {
            var summResult = 0;
            for (int i = 0; i < digitsToBeSummed.Length; i++)
            {
                summResult = summResult + digitsToBeSummed[i];
            }

            return summResult;
        }

        static void ResultOutput(int digitToBeDisplayed)
        {
            Console.WriteLine(digitToBeDisplayed);
        }

    }
}

        /*
         * 
         * Метод:
         * [visibility constraint] [static] <result type> <Method Name>([[modifier] <param type> <param name>])
         * {
         *  // code
         * }
         * 
         * visibility constraint    -   public / protected / internal / private
         * static                   -   static modifier
         * result type              -   TYPE of the result of VOID 
         * param modifier
         *  - out                   -   out parameter 
         *  - in
         *  - ref
         * param type               -   TYPE of the parameter
         * param name               -   parameter name
         * 
         */



 /* Процедура - выполнение параметров без возврата результата
    Функция - выполнение параметров с возвратом результата
    Метод - функция или процедура принадлежат к классу. */